const { users: User } = require('../models/init-models')(require('../db').sequelize, require('sequelize').DataTypes);
const bcrypt = require('bcryptjs')

// 获取用户信息的处理函数
const getUserInfo = async (req, res) => {
    try {
        const user = await User.findByPk(req.auth.user_id, {
            attributes: { exclude: ['password'] } // 排除密码字段
        })
        
        if (!user) {
            return res.error('用户不存在', 1, 404)
        }
        
        res.success(user, '获取用户信息成功')
    } catch (err) {
        console.error('获取用户信息失败:', err)
        res.error('获取用户信息失败')
    }
}

// 更新用户信息
const updateUserInfo = async (req, res) => {
    try {
        // 检查验证结果
        const errors = validationResult(req)
        if (!errors.isEmpty()) {
            return res.status(400).json({
                status: 1,
                message: '数据验证失败',
                errors: errors.array()
            })
        }
        
        // 先检查用户是否存在
        const existingUser = await User.findByPk(req.auth.user_id)
        if (!existingUser) {
            return res.error('用户不存在', 1, 404)
        }
        
        // 执行更新操作
        const [affectedCount] = await User.update(
            { email: req.body.email },
            { where: { user_id: req.auth.user_id } }
        )
        
        if (affectedCount !== 1) {
            return res.error('更新用户信息失败')
        }
        
        // 获取更新后的用户信息
        const updatedUser = await User.findByPk(req.auth.user_id, {
            attributes: { exclude: ['password'] }
        })
        
        res.success(updatedUser, '更新用户信息成功')
    } catch (err) {
        console.error('更新用户信息失败:', err)
        res.error('更新用户信息失败')
    }
}

// 更新密码
const updatePwd = async (req, res) => {
    try {
        // 检查验证结果
        const errors = validationResult(req)
        if (!errors.isEmpty()) {
            return res.status(400).json({
                status: 1,
                message: '数据验证失败',
                errors: errors.array()
            })
        }
        
        const { oldPassword, newPassword } = req.body
        
        // 获取当前用户信息
        const user = await User.findByPk(req.auth.user_id)
        if (!user) {
            return res.error('用户不存在', 1, 404)
        }
        
        // 验证旧密码
        const isOldPasswordValid = await bcrypt.compare(oldPassword, user.password)
        if (!isOldPasswordValid) {
            return res.error('原密码错误', 1, 400)
        }
        
        // 对新密码进行加密
        const saltRounds = 10
        const hashedPassword = await bcrypt.hash(newPassword, saltRounds)
        
        const [affectedCount] = await User.update(
            { password: hashedPassword },
            { where: { user_id: req.auth.user_id } }
        )
        
        if (affectedCount !== 1) {
            return res.error('更新密码失败')
        }
        
        res.success(null, '更新密码成功')
    } catch (err) {
        console.error('更新密码失败:', err)
        res.error('更新密码失败')
    }
}

module.exports = {
    getUserInfo,
    updateUserInfo,
    updatePwd
}